#pragma once

#include "iostream"
#include "vector"
#include "algorithm"

using namespace std;
/*HJJ QQ479287006
 *找出数组中重复的数字。


在一个长度为 n 的数组 nums 里的所有数字都在 0～n-1 的范围内。数组中某些数字是重复的，但不知道有几个数字重复了，也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。

示例 1：

输入：
[2, 3, 1, 0, 2, 5, 3]
输出：2 或 3

来源：力扣（LeetCode）
链接：https://leetcode.cn/problems/shu-zu-zhong-zhong-fu-de-shu-zi-lcof
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 * */

//原地逆转方法
//[2, 3, 1, 0, 2, 5, 3]


//不需要空间但是改变了原来的数
//最快用map 或者set

int findRepeatNumber(vector<int> &nums) {


    for (int i = 0; i < nums.size(); ++i) {


        while (nums[i] != i) {
            int temp = nums[i];//获取i位置的值
            //这俩相等肯定是出现俩数了啊
            if (nums[temp] == temp) {
                return temp;
            } else {

                swap(nums[temp], nums[i]);
            }

        }


    }

    return -1;
}